home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1985-08-07 | 2.8 KB | 81 lines |
- 10 '**************************************************************************
- 20 '** **
- 30 '** LINEAR EQUATION SOLUTION by GAUSSIAN ELIMINATION **
- 40 '** **
- 50 '**************************************************************************
- 60 '
- 70 ' A maximum of 20 equations can be handled by this routine
- 80 '
- 90 '*** DIMENSION MATRIX ***
- 100 DIM A(20,21)
- 110 CLS:KEY OFF:LOCATE 10,10
- 120 '
- 130 '*** INPUT NO. of EQUATIONS ***
- 140 '
- 150 INPUT "Number of Equations, N";N ' number of coefficients
- 160 LPRINT "Gaussian Elimination Solution for ";N;"equations
- 170 PRINT:PRINT
- 180 NP1 = N + 1
- 190 '
- 200 '*** READ COEFFICIENTS ***
- 210 '
- 220 FOR I=1 TO N ' I = row
- 230 FOR J= 1 TO NP1 ' J = coefficient
- 240 PRINT "a(";I;",";J;") = ";:INPUT A(I,J)
- 250 LPRINT "A(";I;",";J;") = ";A(I,J)
- 260 NEXT J
- 270 NEXT I
- 280 '
- 290 ' *** PRINT HEADING ***
- 300 '
- 310 '
- 320 PRINT "Solution to set of ";N;" equations by Gaussian elimination."
- 330 LPRINT "Solution to set of ";N;" equations by Gaussian elimination."
- 340 '
- 350 '*** ELIMINATE COEFFICIENTS BELOW THE DIAGONAL ***
- 360 '
- 370 FOR I= 2 TO N
- 380 FOR J = I TO N
- 390 IF A(I-1,I-1) <>0 THEN 480 'Test if pivot element is zero. If so,
- 400 IM1 = I-1 'switch rows
- 410 FOR M = I TO N
- 420 IF A(M,IM1) = 0 THEN 460
- 430 FOR MM = IM1 TO NP1
- 440 SWAP A(M,MM),A(IM1,MM)
- 450 NEXT MM
- 460 NEXT M
- 470 PRINT "Coefficient matrix is singular. No unique solution to 1set of equations.":GOTO 800
- 480 R = A(J,I-1)/A(I-1,I-1)
- 490 FOR K= I TO NP1
- 500 A(J,K)=A(J,K)-R*A(I-1,K)
- 510 IF A(J,K)=0 THEN 470
- 520 NEXT K
- 530 NEXT J
- 540 NEXT I
- 550 ' Back substitute by elimination of coefficients
- 560 ' above diagonal
- 570 FOR I = 2 TO N
- 580 K = N - I + 2
- 590 R = A(K,NP1)/A(K,K)
- 600 FOR J = I TO N
- 610 L = N - J + 1
- 620 A(L,NP1)=A(L,NP1)-R*A(L,K)
- 630 NEXT J
- 640 NEXT I
- 650 ' Value of variables is column of constants divided by
- 660 ' corresponding number on the diagonal. Compute and
- 670 ' print.
- 680 FOR I = 1 TO N
- 690 X = A(I,NP1)/A(I,I)
- 700 PRINT "X(";I;") = ";X
- 710 LPRINT "X(";I;") = ";X
- 720 NEXT I
- 730 FOR I=1 TO N
- 740 FOR J=1 TO N-1
- 750 SUM= A(I,J)*X(J)
- 760 TOT=SUM +TOT
- 770 IF J=N THEN PRINT "A(";I;","N+1;")=";TOT
- 780 NEXT J
- 790 NEXT I
- 800 END
-